package com.marmot.cloud.framework.core.event;

import lombok.extern.slf4j.Slf4j;
import org.springframework.context.SmartLifecycle;
import org.springframework.stereotype.Component;

/**
 * @ClassName ApplicationStartup
 * @Description 处理应用程序启动的生命周期事件
 * @Author shenpeng
 * @Date 2022/9/5 17:44
 * @ModifyDate 2022/9/5 17:44
 * @Version 1.0
 */
@Slf4j
@Component
public class ApplicationStartup implements SmartLifecycle {

    private boolean running = false;

    /**
     * 表示此生命周期bean是否应该在启动时自动启动。
     *
     * @return true 表示自动启动
     */
    @Override
    public boolean isAutoStartup() {
        return true;
    }

    /**
     * 停止生命周期bean并执行给定的回调。
     *
     * @param callback 停止后的回调
     */
    @Override
    public void stop(Runnable callback) {
        running = false;
        callback.run();
    }

    /**
     * 启动生命周期bean。
     */
    @Override
    public void start() {
        running = true;
    }

    /**
     * 停止生命周期bean。
     */
    @Override
    public void stop() {
        running = false;
    }

    /**
     * 检查生命周期bean是否正在运行。
     *
     * @return true 表示正在运行
     */
    @Override
    public boolean isRunning() {
        return running;
    }

    /**
     * 确定此生命周期bean的启动和停止阶段。
     *
     * @return 返回的数值越大，启动和停止的优先级越低
     */
    @Override
    public int getPhase() {
        return Integer.MAX_VALUE; // 确保在所有生命周期bean之后执行
    }
}
